// axios.js

import axios from "axios";
import notify from "@/utils/notify";

const axiosInstance = axios.create({
    baseURL: import.meta.env.VITE_API_URL, // 设置基础 URL
    timeout: 100000, // 请求超时时间（单位：毫秒）
    headers: {
        "Content-Type": "application/json", // 默认请求头
    },
});

// 请求拦截器
axiosInstance.interceptors.request.use(
    (config) => {
        // 在发送请求之前做些什么，例如加入 token
        // const token = localStorage.getItem('token')
        // if (token) {
        //   config.headers.Authorization = `Bearer ${token}`
        // }
        return config;
    },
    (error) => {
        // 对请求错误做些什么
        return Promise.reject(error);
    }
);

// 响应拦截器
axiosInstance.interceptors.response.use(
    (response) => {
        // 对响应数据做些什么
        return response.data;
    },
    (error) => {
        // 对响应错误做些什么
        if (error.response) {
            // 请求已发出，但服务器返回状态码不在 2xx 范围内
            const status = error.response.status;
            switch (status) {
                case 400:
                    notify({
                        type: "error",
                        title: "请求错误：",
                        message: error.response.data,
                    });
                    break;
                case 401:
                    notify({
                        type: "error",
                        title: "未授权，跳转到登录页面",
                        message: "",
                    });
                    break;
                case 403:
                    notify({
                        type: "error",
                        title: "拒绝访问",
                        message: error.response.data,
                    });
                    break;
                case 404:
                    notify({
                        type: "error",
                        title: "请求的资源不存在",
                        message: error.response.config.url,
                    });
                    break;
                case 500:
                    notify({
                        type: "error",
                        title: "服务器内部错误",
                        message: error.response.data,
                    });
                    break;
                default:
                    notify({
                        type: "error",
                        title: "未知错误",
                        message: error.response.data,
                    });
            }
        } else {
            // 请求未发出，网络错误等
            notify({
                type: "error",
                title: "请求失败",
                message: error.message,
            });
        }
    }
);

export default axiosInstance;
